package common

import (
	"strconv"

	"github.com/gin-gonic/gin"
)

// GetIntParam 从查询参数中获取整数值，如果解析失败则返回默认值
func GetIntParam(c *gin.Context, key string, defaultValue int) int {
	strValue := c.Query(key)
	if strValue == "" {
		return defaultValue
	}

	intValue, err := strconv.Atoi(strValue)
	if err != nil {
		return defaultValue
	}

	return intValue
}

// GetUintParam 从查询参数中获取无符号整数值，如果解析失败则返回默认值
func GetUintParam(c *gin.Context, key string, defaultValue uint) uint {
	strValue := c.Query(key)
	if strValue == "" {
		return defaultValue
	}

	uintValue, err := strconv.ParseUint(strValue, 10, 32)
	if err != nil {
		return defaultValue
	}

	return uint(uintValue)
}

// GetBoolParam 从查询参数中获取布尔值，如果解析失败则返回默认值
func GetBoolParam(c *gin.Context, key string, defaultValue bool) bool {
	strValue := c.Query(key)
	if strValue == "" {
		return defaultValue
	}

	boolValue, err := strconv.ParseBool(strValue)
	if err != nil {
		return defaultValue
	}

	return boolValue
}
